在Linux命令行中删除具有特定扩展名的文件 |
您所在的位置:网站首页 › rm 后缀 › 在Linux命令行中删除具有特定扩展名的文件 |
在Linux命令行中删除具有特定扩展名的文件
以下是在 Linux 命令行中根据文件扩展名删除文件的几种方法。还要学习一些在此过程中要小心的技巧。 您可能会遇到这样的情况:您想要删除具有特定扩展名的多个文件。本教程将帮助您做到这一点。 您可以使用 rm 命令按以下方式删除文件和文件夹: rm [option] filename您可能看起来需要知道此处的确切文件名,但事实并非如此。 让我向您展示几种根据文件扩展名删除多个文件的方法。 方法一:使用rm命令按扩展名删除文件在我的示例中,我有一堆以 .gif 扩展名结尾的 gif 文件。 要删除它们,我可以使用 rm 命令,如下所示: rm *.gif像这样盲目删除文件可能存在风险。首先使用 ls 命令查看将删除哪些文件总是好的: ls *.gif以下是删除扩展名为 .gif 的文件的方法: $ ls 1.gif 2.gif 3.gif 4.gif a.jpg b.png c.webp $ ls *.gif 1.gif 2.gif 3.gif 4.gif $ rm -v *.gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' $ ls a.jpg b.png c.webp可以对任何文件扩展名执行此操作,而不仅仅是 .gif。您甚至可以组合多个扩展。 $ ls f1.txt f2.txt f3.txt f4.txt not-txt-file.pdf random.txt $ rm -v *.txt *.pdf removed 'f1.txt' removed 'f2.txt' removed 'f3.txt' removed 'f4.txt' removed 'not-txt-file.pdf' $ ls random.txt💡您可以将交互式 -i 选项与 rm 命令一起使用,要求在删除每个文件之前进行确认。但是,如果您有大量文件要删除,这可能不太方便。想知道它是如何工作的?通配符!简而言之,通配符是用于匹配特定模式的特殊字符。以下是一些经常使用的通配符: *匹配一次或多次出现 ?匹配单个出现的情况 [] (Square brackets)指定匹配范围 ^从匹配中排除 您在此处使用了 * 通配符,这意味着它可以匹配任意字符的一次或多次出现。 当您说 *.gif 时,它表示通向 .gif 的任意字母组合。换句话说,它为您提供扩展名为 .gif 的所有文件。 除了一个通配符之外,还可以使用每个通配符。但我们现在不讨论这些细节。 * 和扩展名之间的点很重要!许多人犯了将*.gif 与*gif 混淆的错误。这个不对。 * 和扩展名之间的点 (.) 至关重要。 以包含以下文件的场景为例,看看当我使用正则表达式 *gif 而不是 *.gif 时会发生什么: $ ls 1.gif 2.gif 3.gif 4.gif definately-not-a-gif jpg-not-gif not-a-gif $ rm -v *gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' removed 'definately-not-a-gif' removed 'jpg-not-gif' removed 'not-a-gif'它还删除了其中包含字符串 gif 的文件,即使它不是文件的扩展名,它只是在文件名末尾有 gif ,没有前面的点。 当您删除带有通配符或正则表达式的文件时,请确保尽可能精确。 方法二:使用find命令递归删除特定扩展名的文件rm 命令仅删除当前目录中的文件。即使使用递归选项,它也不会从子目录中删除文件。 要递归删除具有特定扩展名的文件,可以结合使用 find 命令和 rm 命令: 这是一个示例,其中子目录中也有 .gif 文件。 $ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt要删除文件,您可以使用 find 和 exec 命令,如下所示: find . -type f -name "*.gif" -exec rm -v {} \;这是我运行命令时的输出: $ find . -type f -name "*.gif" -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir3/file_3.gif' removed './dir2/file_2.gif' removed './file_0.gif' removed './dir4/file_4.gif让我们来分解一下。 find后面的句点表示在当前目录中查找 “-name”标志指定文件的名称,我们可以在其中使用正则表达式 “-exec”标志用于对 find 命令的结果执行 bash 命令 “{}”大括号充当匹配文件结果的占位符,因此“rm -v {}”将删除 find 命令找到的文件。 最后,分号结束 shell 执行的命令(exec 之后的命令),并使用反斜杠“\”以便正确转义分号。你不应该担心这个。 您可以在下面的教程中了解 find 命令的更多示例。 高级提示:使用 find 命令处理具有多个扩展名的文件上面显示的命令不包括查找具有多个扩展名的文件,例如“rm *.gif *.txt” 为此,您可以使用 -o 参数,该参数表示“逻辑 OR 运算符”。但我们还必须使用反斜杠“\”来转义括号 $ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt $ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir1/file_a.txt' removed './dir3/file_3.gif' removed './dir3/file_c.txt' removed './dir2/file_2.gif' removed './dir2/file_b.txt' removed './file_0.gif' removed './file_z.txt' removed './dir4/file_d.txt' removed './dir4/file_4.gif'在这里,您可以看到所有扩展名为“txt”的文件和扩展名为“gif”的文件都被递归删除。 我知道您会觉得对每种文件扩展名类型单独使用 find 命令会更容易,而且您没有错。 结论本文介绍了删除具有特定扩展名的文件。我们还研究了递归查找和删除这些文件。 “能力越大,责任越大”,在使用通配符和正则表达式时请记住这一点。一次输入错误,重要的文件可能会被无意中删除。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |